package org.terukusu.dropboxdownloader;

/**
 * {@link android.os.AsyncTask}のUIスレッドから実行される処理を
 * リスナで行うように拡張したクラスです。
 * リスナの設定はUIスレッドからじゃないとやっちゃダメ。
 *
 * @author Teruhiko Kusunoki&lt;<a href="teru.kusu@gmail.com">teru.kusu@gmail.com</a>&gt;
 *
 */
public abstract class AsyncTask<Params, Progress, Result> extends android.os.AsyncTask<Params, Progress, Result> {

    AsyncTaskListener<Progress, Result> asyncTaskListener;

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onCancelled()
     */
    @Override
    protected void onCancelled() {
        if (asyncTaskListener != null) {
            asyncTaskListener.onCancelled();
        }
    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
     */
    @Override
    protected void onPostExecute(Result result) {
        if (asyncTaskListener != null) {
            asyncTaskListener.onPostExecute(result);
        }
    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onPreExecute()
     */
    @Override
    protected void onPreExecute() {
        if (asyncTaskListener != null) {
            asyncTaskListener.onPreExecute();
        }
    }

    /* (non-Javadoc)
     * @see android.os.AsyncTask#onProgressUpdate(Progress[])
     */
    @Override
    protected void onProgressUpdate(Progress... values) {
        if (asyncTaskListener != null) {
            asyncTaskListener.onProgressUpdate(values);
        }
    }

    /**
     * asyncTaskListener を設定します。
     * @param asyncTaskListener セットする asyncTaskListener
     */
    public void setAsyncTaskListener(AsyncTaskListener<Progress, Result> asyncTaskListener) {
        this.asyncTaskListener = asyncTaskListener;
    }
}
